@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion

:: 设置dry run模式默认为关闭
set "DRY_RUN=0"

:: 检查管理员权限
net session >nul 2>&1
if %errorLevel% neq 0 (
    echo 正在请求管理员权限...
    powershell -Command "Start-Process '%~0' -Verb RunAs"
    exit /b
)

:menu
cls
echo ====================================
echo        Windows 系统管理工具
echo ====================================
echo.
echo  [模式设置]
echo  1. 切换 Dry Run 模式（当前：!DRY_RUN!==1 为开启）
echo.
echo  [UAC 管理]
echo  2. 禁用 UAC
echo  3. 启用 UAC（恢复默认设置）
echo.
echo  [Windows Defender 白名单]
echo  4. 添加白名单目录
echo  5. 移除白名单目录
echo.
echo  [HVCI 管理]
echo  6. 禁用内核隔离(HVCI)
echo  7. 启用内核隔离(HVCI)
echo.
echo  [Windows 更新管理]
echo  8. 禁用 Windows 更新
echo  9. 启用 Windows 更新
echo.
echo  [系统睡眠管理]
echo  A. 禁用系统睡眠和锁屏
echo  B. 恢复系统睡眠设置
echo.
echo  0. 退出
echo ====================================
echo.

choice /c 1234567890AB /n /m "请输入选项（0-9,A-B）："
if errorlevel 12 goto restore_sleep
if errorlevel 11 goto disable_sleep
if errorlevel 10 goto end
if errorlevel 9 goto enable_update
if errorlevel 8 goto disable_update
if errorlevel 7 goto enable_hvci
if errorlevel 6 goto disable_hvci
if errorlevel 5 goto remove_whitelist
if errorlevel 4 goto add_whitelist
if errorlevel 3 goto enable_uac
if errorlevel 2 goto disable_uac
if errorlevel 1 goto toggle_dry_run
goto menu

:toggle_dry_run
cls
echo.
if !DRY_RUN!==1 (
    set "DRY_RUN=0"
    echo Dry Run 模式已关闭，将执行实际操作。
) else (
    set "DRY_RUN=1"
    echo Dry Run 模式已开启，仅显示将要执行的操作。
)
echo.
timeout /t 2 >nul
goto menu

:disable_uac
cls
echo.
if !DRY_RUN!==1 (
    echo [Dry Run] 将执行以下操作：
    echo [Dry Run] reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "EnableLUA" /t REG_DWORD /d 0 /f
    echo [Dry Run] reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "ConsentPromptBehaviorAdmin" /t REG_DWORD /d 0 /f
    echo [Dry Run] reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "PromptOnSecureDesktop" /t REG_DWORD /d 0 /f
) else (
    echo 正在修改注册表以禁用 UAC...
    reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "EnableLUA" /t REG_DWORD /d 0 /f >nul
    reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "ConsentPromptBehaviorAdmin" /t REG_DWORD /d 0 /f >nul
    reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "PromptOnSecureDesktop" /t REG_DWORD /d 0 /f >nul

    if !errorLevel! equ 0 (
        echo UAC 已成功禁用！
        echo 请重启计算机以使更改生效。
    ) else (
        echo 修改注册表失败！
    )
)
echo.
choice /c yn /n /m "是否返回主菜单？(Y=是/N=退出): "
if errorlevel 2 goto end
if errorlevel 1 goto menu

:enable_uac
cls
echo.
if !DRY_RUN!==1 (
    echo [Dry Run] 将执行以下操作：
    echo [Dry Run] reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "EnableLUA" /t REG_DWORD /d 1 /f
    echo [Dry Run] reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "ConsentPromptBehaviorAdmin" /t REG_DWORD /d 5 /f
    echo [Dry Run] reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "PromptOnSecureDesktop" /t REG_DWORD /d 1 /f
) else (
    echo 正在修改注册表以启用 UAC...
    reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "EnableLUA" /t REG_DWORD /d 1 /f >nul
    reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "ConsentPromptBehaviorAdmin" /t REG_DWORD /d 5 /f >nul
    reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "PromptOnSecureDesktop" /t REG_DWORD /d 1 /f >nul

    if !errorLevel! equ 0 (
        echo UAC 已成功启用并恢复为默认设置！
        echo 请重启计算机以使更改生效。
    ) else (
        echo 修改注册表失败！
    )
)
echo.
choice /c yn /n /m "是否返回主菜单？(Y=是/N=退出): "
if errorlevel 2 goto end
if errorlevel 1 goto menu

:add_whitelist
cls
echo.
:: 需要排除的目录列表
set "dirs="C:\Windows" "C:\Users" "C:\ProgramData""

echo 正在添加排除目录...
if !DRY_RUN!==1 (
    echo [Dry Run] 将为以下目录添加白名单：
    for %%d in (!dirs!) do (
        if not exist %%d (
            echo [Dry Run] [跳过] 目录不存在: %%d
        ) else (
            echo [Dry Run] powershell -Command "Add-MpPreference -ExclusionPath %%d"
        )
    )
) else (
    for %%d in (!dirs!) do (
        if not exist %%d (
            echo  [跳过] 目录不存在: %%d
        ) else (
            echo  正在处理: %%d
            powershell -Command "Add-MpPreference -ExclusionPath %%d" >nul
            if !errorlevel! equ 0 (
                echo  [成功] %%d
            ) else (
                echo  [失败] %%d
            )
        )
    )
    echo 所有目录处理完成！
)
echo.
choice /c yn /n /m "是否返回主菜单？(Y=是/N=退出): "
if errorlevel 2 goto end
if errorlevel 1 goto menu

:remove_whitelist
cls
echo.
:: 需要移除的目录列表
set "dirs="C:\Windows" "C:\Users" "C:\ProgramData""

echo 正在移除排除目录...
if !DRY_RUN!==1 (
    echo [Dry Run] 将为以下目录移除白名单：
    for %%d in (!dirs!) do (
        if not exist %%d (
            echo [Dry Run] [跳过] 目录不存在: %%d
        ) else (
            echo [Dry Run] powershell -Command "Remove-MpPreference -ExclusionPath %%d"
        )
    )
) else (
    for %%d in (!dirs!) do (
        if not exist %%d (
            echo  [跳过] 目录不存在: %%d
        ) else (
            echo  正在处理: %%d
            powershell -Command "Remove-MpPreference -ExclusionPath %%d" >nul
            if !errorlevel! equ 0 (
                echo  [成功] %%d
            ) else (
                echo  [失败] %%d
            )
        )
    )
    echo 所有目录处理完成！
)
echo.
choice /c yn /n /m "是否返回主菜单？(Y=是/N=退出): "
if errorlevel 2 goto end
if errorlevel 1 goto menu

:disable_hvci
cls
echo 开始执行禁用HVCI操作...
echo.

if %DRY_RUN% equ 1 (
    echo [Dry Run] 将执行以下操作：
    echo [Dry Run] reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" /v "Enabled" /t REG_DWORD /d 0 /f
    echo [Dry Run] dism /online /disable-feature /featurename:VirtualMachinePlatform /norestart
    echo [Dry Run] bcdedit /set hypervisorlaunchtype off
    echo.
    echo [Dry Run] 模拟执行完成
    echo.
    choice /c yn /n /m "是否返回主菜单？(Y=是/N=退出): "
    if errorlevel 2 goto end
    if errorlevel 1 goto menu
)

echo 步骤1: 修改注册表以禁用内核隔离(HVCI)...
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" /v "Enabled" /t REG_DWORD /d 0 /f
if errorlevel 1 (
    echo 修改注册表失败！
    echo.
    choice /c yn /n /m "是否返回主菜单？(Y=是/N=退出): "
    if errorlevel 2 goto end
    if errorlevel 1 goto menu
)
echo 注册表修改成功
echo.

echo 步骤2: 正在关闭虚拟化平台功能...
dism /online /disable-feature /featurename:VirtualMachinePlatform /norestart
if errorlevel 1 (
    echo 关闭虚拟化平台失败！
    echo.
    choice /c yn /n /m "是否返回主菜单？(Y=是/N=退出): "
    if errorlevel 2 goto end
    if errorlevel 1 goto menu
)
echo 虚拟化平台已关闭
echo.

echo 步骤3: 正在禁用Hyper-V启动项...
bcdedit /set hypervisorlaunchtype off
if errorlevel 1 (
    echo 禁用Hyper-V启动项失败！
    echo.
    choice /c yn /n /m "是否返回主菜单？(Y=是/N=退出): "
    if errorlevel 2 goto end
    if errorlevel 1 goto menu
)
echo Hyper-V启动项已禁用
echo.

echo 所有操作已完成！
echo 成功禁用内核隔离！
echo 请重启计算机以使更改生效。
echo.
choice /c yn /n /m "是否返回主菜单？(Y=是/N=退出): "
if errorlevel 2 goto end
if errorlevel 1 goto menu

:enable_hvci
cls
echo 开始执行启用HVCI操作...
echo.

if %DRY_RUN% equ 1 (
    echo [Dry Run] 将执行以下操作：
    echo [Dry Run] reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" /v "Enabled" /t REG_DWORD /d 1 /f
    echo [Dry Run] dism /online /enable-feature /featurename:VirtualMachinePlatform /norestart
    echo [Dry Run] bcdedit /set hypervisorlaunchtype auto
    echo.
    echo [Dry Run] 模拟执行完成
    echo.
    choice /c yn /n /m "是否返回主菜单？(Y=是/N=退出): "
    if errorlevel 2 goto end
    if errorlevel 1 goto menu
)

echo 步骤1: 修改注册表以启用内核隔离(HVCI)...
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\Scenarios\HypervisorEnforcedCodeIntegrity" /v "Enabled" /t REG_DWORD /d 1 /f
if errorlevel 1 (
    echo 修改注册表失败！
    echo.
    choice /c yn /n /m "是否返回主菜单？(Y=是/N=退出): "
    if errorlevel 2 goto end
    if errorlevel 1 goto menu
)
echo 注册表修改成功
echo.

echo 步骤2: 正在开启虚拟化平台功能...
dism /online /enable-feature /featurename:VirtualMachinePlatform /norestart
if errorlevel 1 (
    echo 开启虚拟化平台功能失败！
    echo.
    choice /c yn /n /m "是否返回主菜单？(Y=是/N=退出): "
    if errorlevel 2 goto end
    if errorlevel 1 goto menu
)
echo 虚拟化平台已开启
echo.

echo 步骤3: 正在启用Hyper-V启动项...
bcdedit /set hypervisorlaunchtype auto
if errorlevel 1 (
    echo 启用Hyper-V启动项失败！
    echo.
    choice /c yn /n /m "是否返回主菜单？(Y=是/N=退出): "
    if errorlevel 2 goto end
    if errorlevel 1 goto menu
)
echo Hyper-V启动项已启用
echo.

echo 所有操作已完成！
echo 成功启用内核隔离！
echo 请重启计算机以使更改生效。
echo.
choice /c yn /n /m "是否返回主菜单？(Y=是/N=退出): "
if errorlevel 2 goto end
if errorlevel 1 goto menu

:disable_update
cls
echo.
if !DRY_RUN!==1 (
    echo [Dry Run] 将执行以下操作：
    echo [Dry Run] net stop wuauserv
    echo [Dry Run] sc config wuauserv start=disabled
    echo [Dry Run] net stop WaaSMedicSvc
    echo [Dry Run] sc config WaaSMedicSvc start=disabled
    echo [Dry Run] net stop UsoSvc
    echo [Dry Run] sc config UsoSvc start=disabled
) else (
    echo 正在禁用 Windows 更新服务...
    net stop wuauserv
    sc config wuauserv start=disabled
    echo Windows 更新服务已禁用
    echo.
    echo 正在禁用 Windows Update Medic Service...
    net stop WaaSMedicSvc
    sc config WaaSMedicSvc start=disabled
    echo Windows Update Medic Service 已禁用
    echo.
    echo 正在禁用 Windows Update Orchestrator Service...
    net stop UsoSvc
    sc config UsoSvc start=disabled
    echo Windows Update Orchestrator Service 已禁用
    echo.
    echo Windows 更新服务已全部禁用！
)
echo.
choice /c yn /n /m "是否返回主菜单？(Y=是/N=退出): "
if errorlevel 2 goto end
if errorlevel 1 goto menu

:enable_update
cls
echo.
if !DRY_RUN!==1 (
    echo [Dry Run] 将执行以下操作：
    echo [Dry Run] sc config wuauserv start=auto
    echo [Dry Run] net start wuauserv
    echo [Dry Run] sc config WaaSMedicSvc start=auto
    echo [Dry Run] net start WaaSMedicSvc
    echo [Dry Run] sc config UsoSvc start=auto
    echo [Dry Run] net start UsoSvc
) else (
    echo 正在启用 Windows 更新服务...
    sc config wuauserv start=auto
    net start wuauserv
    echo Windows 更新服务已启用
    echo.
    echo 正在启用 Windows Update Medic Service...
    sc config WaaSMedicSvc start=auto
    net start WaaSMedicSvc
    echo Windows Update Medic Service 已启用
    echo.
    echo 正在启用 Windows Update Orchestrator Service...
    sc config UsoSvc start=auto
    net start UsoSvc
    echo Windows Update Orchestrator Service 已启用
    echo.
    echo Windows 更新服务已全部启用！
)
echo.
choice /c yn /n /m "是否返回主菜单？(Y=是/N=退出): "
if errorlevel 2 goto end
if errorlevel 1 goto menu

:disable_sleep
cls
echo.
if !DRY_RUN!==1 (
    echo [Dry Run] 将执行以下操作：
    echo [Dry Run] powercfg /change standby-timeout-ac 0
    echo [Dry Run] powercfg /change standby-timeout-dc 0
    echo [Dry Run] powercfg /change monitor-timeout-ac 0
    echo [Dry Run] powercfg /change monitor-timeout-dc 0
    echo [Dry Run] powercfg /hibernate off
) else (
    echo 正在禁用系统睡眠和锁屏...
    
    :: 禁用睡眠
    powercfg /change standby-timeout-ac 0
    powercfg /change standby-timeout-dc 0
    
    :: 禁用显示器关闭
    powercfg /change monitor-timeout-ac 0
    powercfg /change monitor-timeout-dc 0
    
    :: 禁用休眠
    powercfg /hibernate off
    
    if !errorLevel! equ 0 (
        echo 系统已设置为不会进入睡眠模式或关闭显示器！
    ) else (
        echo 设置系统睡眠模式失败！
    )
)
echo.
choice /c yn /n /m "是否返回主菜单？(Y=是/N=退出): "
if errorlevel 2 goto end
if errorlevel 1 goto menu

:restore_sleep
cls
echo.
if !DRY_RUN!==1 (
    echo [Dry Run] 将执行以下操作：
    echo [Dry Run] powercfg /change standby-timeout-ac 30
    echo [Dry Run] powercfg /change standby-timeout-dc 30
    echo [Dry Run] powercfg /change monitor-timeout-ac 10
    echo [Dry Run] powercfg /change monitor-timeout-dc 10
    echo [Dry Run] powercfg /hibernate on
) else (
    echo 正在恢复系统睡眠和锁屏设置...
    
    :: 恢复睡眠时间设置（30分钟）
    powercfg /change standby-timeout-ac 30
    powercfg /change standby-timeout-dc 30
    
    :: 恢复显示器超时设置（10分钟）
    powercfg /change monitor-timeout-ac 10
    powercfg /change monitor-timeout-dc 10
    
    :: 启用休眠
    powercfg /hibernate on
    
    if !errorLevel! equ 0 (
        echo 系统睡眠和显示器设置已恢复为默认值！
    ) else (
        echo 恢复系统睡眠设置失败！
    )
)
echo.
choice /c yn /n /m "是否返回主菜单？(Y=是/N=退出): "
if errorlevel 2 goto end
if errorlevel 1 goto menu

:end
cls
echo 感谢使用！
timeout /t 2 >nul
exit 